Análise Exploratória#

Datasets#

Os datasets serão armazenados no diretório data conforme a estrutura a seguir:

├── data                            <- Diretório de dados.
│   ├── external                    <- Diretório de dados externos(temporário).
│   │   └── input_video             <- Diretório para armazenar o vídeo recebido via 
│   │                                  upload para classificação.
│   │   
│   ├── interim                     <- Diretório de dados em processamento (temporário).
│   │   └── input_face              <- Diretório para armazenar os frames processados 
│   │                                  do vídeo recebido via upload para classificação.
│   │
│   ├── processed                   <- Diretório de dados processados.
│   │   ├── dataset_celebdf         <- Diretório de faces do dataset celebdf
│   │   │   └── real_face           <- Diretório de faces reais
│   │   │   └── fake_face           <- Diretório de faces falsas
│   │   │
│   │   ├── dataset_faceforensics   <- Diretório de faces do dataset faceforensics
│   │   │   └── real_face           <- Diretório de faces reais
│   │   │   └── fake_face           <- Diretório de faces falsas
│   │   │
│   │   └── dataset_dfdc            <- Diretório de faces do dataset dfdc
│   │       └── real_face           <- Diretório de faces reais
│   │       └── fake_face           <- Diretório de faces falsas
│   │   
│   └── raw                         <- Diretório de dados brutos.
│       ├── dataset_celebdf         <- Diretório de vídeos do dataset celebdf
│       │   └── real_video          <- Diretório de vídeos reais
│       │   └── fake_video          <- Diretório de vídeos falsos
│       │
│       ├── dataset_faceforensics   <- Diretório de vídeos do dataset faceforensics
│       │   └── real_video          <- Diretório de vídeos reais
│       │   └── fake_video          <- Diretório de vídeos falsos
│       │
│       └── dataset_dfdc            <- Diretório de vídeos do dataset dfdc
│           └── real_video          <- Diretório de vídeos reais
│           └── fake_video          <- Diretório de vídeos falsos

# Bibliotecas
import pandas as pd
from glob import glob
import cv2
import numpy as np
from IPython.display import HTML
from base64 import b64encode
import matplotlib.pyplot as plt
%matplotlib inline

# Funções para análise exploratória:
def display_img(video):
    cap = cv2.VideoCapture(video)  # take 1 picture
    ret, frame = cap.read()
    fig = plt.figure(figsize=(8,8))
    ax = fig.add_subplot(111)
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    ax.imshow(frame)

def explora(dataset):
    # Lista de vídeos:
    videos_reais = glob("../data/raw/dataset_"+ dataset +"/real_video/*.mp4")
    videos_fakes = glob("../data/raw/dataset_"+ dataset +"/fake_video/*.mp4")
    # Totais:
    total_reais = len(videos_reais)
    total_fakes = len(videos_fakes)
    print("Total de vídeos: ", total_reais + total_fakes)
    print("Total de vídeos reais: ", total_reais)
    print("Total de vídeos falsos: ", total_fakes)
    # Cria dataframe de identificação
    dataframe_videos_reais =  pd.DataFrame( data = {"video": videos_reais, "label" : "1", "descricao": "REAL"})
    dataframe_videos_fakes =  pd.DataFrame( data = {"video": videos_fakes, "label" : "0", "descricao": "FAKE"})
    dataframe_videos = pd.concat([dataframe_videos_reais, dataframe_videos_fakes])
    del dataframe_videos_reais, dataframe_videos_fakes
    dataframe_videos.to_csv("../data/raw/dataset_"+ dataset +"/metadados.csv",sep=";", index=False)
    # Plot gráfico
    print("\nGráfico dos quantitativos:")
    display(dataframe_videos['descricao'].value_counts().plot.bar())
    return videos_reais, videos_fakes, dataframe_videos

def display_img(video):
    cap = cv2.VideoCapture(video) 
    ret, frame = cap.read()
    fig = plt.figure(figsize=(8,8))
    ax = fig.add_subplot(111)
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    ax.imshow(frame)

def visualiza_video(video):
    video_url = open(video,'rb').read()
    data_url = "data:video/mp4;base64," + b64encode(video_url).decode()
    return HTML("""<video width=500 controls><source src="%s" type="video/mp4"></video>""" % data_url)

CELEB-DF:#

Link:

  • Celeb-DF: https://www.kaggle.com/datasets/reubensuju/celeb-df-v2

Informações de quantitativos:

dataset ='celebdf'
videos_reais, videos_fakes, df_videos = explora(dataset)
Total de vídeos:  6529
Total de vídeos reais:  890
Total de vídeos falsos:  5639

Gráfico dos quantitativos:
<Axes: xlabel='descricao'>
../_images/788924d904fb8b2b4f379a66bb6a558785aaf4b3707cb060e55a73824cd9c71e.png

Exemplo de um frame de um vídeo real:

display_img(videos_reais[0])
../_images/eba597f525c06d87383f2d70462a1d984243918e083df592ad0bea0cdb78b1b1.png

Exemplo de um vídeo real:

visualiza_video(videos_reais[0])

Exemplo de um frame de um vídeo fake:

display_img(videos_fakes[0])
../_images/9dabc2054c80e77c706410a1de37ca9a01e89303ff2ec638fa5bfc6999167453.png

Exemplo de um vídeo Fake:

visualiza_video(videos_fakes[0])

FaceForensics++:#

Link:

  • FaceForensics: https://www.kaggle.com/datasets/sorokin/faceforensics

Informações de quantitativos:

dataset ='faceforensics'
videos_reais, videos_fakes, df_videos = explora(dataset)
Total de vídeos:  5000
Total de vídeos reais:  1000
Total de vídeos falsos:  4000

Gráfico dos quantitativos:
<Axes: xlabel='descricao'>
../_images/dc4224e725aad1557d4b0d547cee768ca5a10fe63f7ccf09af6747ab717154ba.png

Exemplo de um frame de um vídeo real:

display_img(videos_reais[0])
../_images/2fddf57bffc0f5dc237accae30e945d1f9ef878ca3afee66e0dde1b839a7d4e4.png

Exemplo de um vídeo real:

visualiza_video(videos_reais[0])

Exemplo de um frame de um vídeo fake:

display_img(videos_fakes[0])
../_images/4af788478866cc54fae29697d7f93b73309c9dd824fc48ab9740e831e3cb49f8.png

Exemplo de um vídeo Fake:

visualiza_video(videos_fakes[0])

DFDC:#

Link:

  • DFDC: https://www.kaggle.com/competitions/deepfake-detection-challenge/data

Informações de quantitativos:

dataset ='dfdc'
videos_reais, videos_fakes, df_videos = explora(dataset)
Total de vídeos:  800
Total de vídeos reais:  277
Total de vídeos falsos:  523

Gráfico dos quantitativos:
<Axes: xlabel='descricao'>
../_images/fb92239051cea9f231664ab293e9f3474dbdbdebeecaa62c5ed7b72d9b84f996.png

Exemplo de um frame de um vídeo real:

display_img(videos_reais[0])
../_images/d8b7a60988b13dc9de1603ce490ae8426daca1a4af68acbcd45f75abf1cea835.png

Exemplo de um vídeo real:

visualiza_video(videos_reais[0])

Exemplo de um frame de um vídeo fake:

display_img(videos_fakes[0])
../_images/70089a19a63512aee012e9d2bee4eacaeb82015ffc7508394b7d153dd92b054d.png

Exemplo de um vídeo Fake:

visualiza_video(videos_fakes[0])